#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@Author: Lidi
@Time  : 2019/11/13 8:29
@Desc  : cProfile 性能分析
"""

import cProfile

"""
# 说明
参考：https://time.geekbang.org/column/article/108350
cProfile 性能分析
# 运行方式一
import cProfile
...
cProfile.run(fun())

# 运行方式二
python3 -m cProfile xxx.py

ncalls，调用次数
tottime，需要时间
tottime percall，tottime/ncalls
...
"""


# 装饰器，解决fib重复调用问题
def memoize(f):
    memo = {}
    def helper(x):
        if x not in memo:
            memo[x] = f(x)
        return memo[x]
    return helper


@memoize
def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)

# 递归没太懂
def fib_seq(n):
    res = []
    if n > 0:
        res.extend(fib_seq(n-1))
    res.append(fib(n))
    return res

# print(fib_seq(30))
# print(fib_seq(30))


# 性能调试
cProfile.run('fib_seq(10)')

